#ifndef ORDER_H
#define ORDER_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <time.h>

// 订单状态定义
#define ORDER_STATUS_PENDING   0  // 待处理
#define ORDER_STATUS_FINISHED  1  // 已完成
#define ORDER_STATUS_CANCELED  2  // 已取消

// 订单信息结构体
typedef struct {
    int id;             // 订单编号
    int user_id;        // 下单用户编号
    int drink_id;       // 饮品编号
    int quantity;       // 订购数量
    time_t order_time;  // 下单时间
    int status;         // 订单状态
} Order;

// 订单链表节点结构体
typedef struct OrderNode {
    Order data;
    struct OrderNode* next;
} OrderNode;

// 链表操作函数声明

// 加载所有订单信息到链表，返回订单数量
int load_orders(const char* filename, OrderNode** head);

// 保存所有订单信息到文件，返回保存的订单数量
int save_orders(const char* filename, OrderNode* head);

// 添加新订单到链表尾部，若编号已存在则不添加，返回1成功，0已存在
int add_order(OrderNode** head, const Order* new_order);

// 根据订单编号删除订单，成功返回1，失败返回0
int delete_order(OrderNode** head, int order_id);

// 查找订单，返回指向该节点的指针，未找到返回NULL
OrderNode* find_order_by_id(OrderNode* head, int order_id);

// 修改订单信息，成功返回1，失败返回0
int update_order(OrderNode* head, const Order* updated_order);

// 按用户、饮品、时间等条件查询订单，返回链表（需实现）
OrderNode* query_orders(OrderNode* head, int user_id, int drink_id, time_t start_time, time_t end_time, int status);

// 打印所有订单信息（调试用）
void print_all_orders(OrderNode* head);

// 释放链表内存
void free_all_orders(OrderNode* head);

#ifdef __cplusplus
}
#endif

#endif // ORDER_H